解決陣列在動態資料操作上的基本限制。
- 陣列耗時 $O(n)$ 的修改時間所帶來的關鍵教訓是:物理連續性是問題的根本原因,迫使我們在位置 $i$ 插入或刪除元素時必須移動其他元素。
- 若應用程式需要頻繁且快速的修改(插入或刪除),即使陣列具有 $O(1)$ 的隨機存取能力,其效率仍然不佳。
- 為達成最佳的$O(1)$ 修改複雜度,我們必須找到一種根本改變元素儲存與排序方式的順序資料結構。
- 目標 1:邏輯與物理分離。邏輯順序不應依賴於物理位置;元素應允許隨意存放於記憶體中的任何位置。
- 目標 2:動態大小。結構必須能按需求即時擴大或縮小,無需定期進行昂貴的 $O(n)$ 重新配置。
- 目標 3:常數時間局部修改。一旦找到插入點 $i$,修改序列只需常數個指標操作即可完成($O(1)$)。
- 此方法將複雜度從移動資料(移動元素)轉移到管理關係(指標)。
順序結構對比
| 操作 | 陣列(目標) | 連結結構(目標) |
|---|---|---|
| 隨機存取 | $O(1)$ | $O(n)$(需遍歷) |
| 在 $i$ 處插入/刪除 | $O(n)$(移位) | $O(1)$(指標更新,一旦找到 $i$ 即可) |
| 記憶體配置 | 連續 | 非連續(動態) |